\documentclass[10.5pt, a4paper]{article}

\usepackage{xeCJK}
\newCJKfontfamily{\heiti}[AutoFakeBold={3.17}]{SimHei}

\usepackage{geometry}
\geometry{
    left = 0.6in,
    right = 0.6in,
    top = 0.8in,
    bottom = 1.0in
}
\usepackage{amssymb,amsbsy,amsmath,xcolor,mathrsfs,graphicx,tikz,xcolor}
\usepackage{listings}
\usepackage{tasks}
\settasks{
    label = \Alph*. ,
    label-width = 16pt
}

\renewcommand{\title}[3]{
    \begin{center}
        \Large\heiti #1~年~#2~月 Python~#3级考试
    \end{center}
}
\newcommand{\TimeAndName}[1]{
    \begin{center}
        考试时间:~#1~ 分钟 \qquad\qquad\qquad\qquad 姓名:\underline{\quad\quad\quad\quad}
    \end{center}
}

\begin{document}
    \lstset{
        language = python,
        keywordstyle = \color{orange}\bfseries,
        emph = {print,bool,chr,ord,sorted,float,type,oct,hex,abs,sum,len,int,open,list,map,
        str,min,input,max,range,divmod,ascii,round,all,bin,NameError,eval,any,pow,enumerate},
        emphstyle = \color{purple}\bfseries,
        showspaces = false,
        basicstyle = \ttfamily,
        morekeywords = {True,False}
    }

    \title{2020}{12}{三}
    
    \TimeAndName{60}
    
    \vspace{1cm}
    {\noindent\heiti 第一部分、单选题(共 25 题,每题 2 分,共50分.)}

    \begin{enumerate}
        % 1
        \item 要对二维列表所有的数据格式化输出,打印成表格形状,程序段如下:
        \begin{lstlisting}
            ls = [['金京',89],['吴树海',80],['王津津',90]]
            for row in range(len(ls)):
                for column in range(len(ls[row])):
                    print(_________,end='\t')
                print()
        \end{lstlisting}
        划线处的代码应该为?(\qquad)
        \begin{tasks}(2)
            \task \lstinline!ls[row][column]!
            \task \lstinline!ls[column][row]!
            \task \lstinline!row[row][ls]!
            \task \lstinline!row[ls][column]!
        \end{tasks}

        % 2
        \item 有如下列表\lstinline{l=[9,2,8,6,3,4]},采用选择排序进,请问第二趟排序之后的结果是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline{[2,3,8,6,9,4]}
            \task \lstinline{[2,8,6,3,4,9]}
            \task \lstinline{[2,6,3,4,8,9]}
            \task \lstinline{[2,3,4,6,8,9]}
        \end{tasks}

        % 3
        \item 如下代码执行后,输出的结果是?(\qquad)
        \begin{lstlisting}
            shuzu = list(range(4))
            print(shuzu)
        \end{lstlisting}
        \begin{tasks}(2)
            \task \lstinline{[0,1,2,3]}
            \task \lstinline{[0,1,2,3,4]}
            \task \lstinline{[1,2,3,4]}
            \task \lstinline{[0,0,0,0]}
        \end{tasks}

        % 4
        \item 有如下列表\lstinline!l=[9,2,8,6,3,4]!,采用冒泡排序进行升序排序,请问第二趟排序之后的结果是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline{[2,3,8,6,9,4]}
            \task \lstinline{[2,8,6,3,4,9]}
            \task \lstinline{[2,6,3,4,8,9]}
            \task \lstinline{[2,3,4,6,8,9]}
        \end{tasks}
        
        % 5
        \item 关于列表的索引,描述不正确的是?(\qquad)
        \begin{tasks}(2)
            \task 列表中的索引代表各元素在该列表中的位置
            \task 第一个元素的索引是
            \task 索引通常是用自然数来表示的
            \task 我们可以使用下标索引来访问列表中的值
        \end{tasks}

        % 6
        \item 关于十六进制数,下列说法错误的是?(\qquad)
        \begin{tasks}
            \task 十六进制数从小数点向左数第一位代表有几1
            \task 十进制数的基数个数为16,所以里面包括0-9,A-F,这十六个数码
            \task 相同的十进制数分别转换成十六进制数和二进制数后,二进制数的数位通常比十六进制数长
            \task 十进制数转换成十六进制数后,它的位数一定会变短
        \end{tasks}

        % 7
        \item 关于数据,下列说法不正确的是?(\qquad)
        \begin{tasks}(2)
            \task 一维数据一定由有序数据构成
            \task 常见的表格属于二维数据
            \task \lstinline![[1,2],[3,4]]!可以表达二维数据
            \task 二维数据由关联的关系数据构成
        \end{tasks}

        % 8
        \item 关于二进制,八进制,十进制,十六进制的表示方法,下列说法不正确的是?(\qquad)
        \begin{tasks}(2)
            \task 以0b开头表示的是二进制
            \task 以0o开头表示的是八进制
            \task 以0x开头表示的是十六进制
            \task 以0i开头表示的是十进制
        \end{tasks}

        % 9
        \item \lstinline!int()!函数可以将字符串转换为数值,关于\lstinline!int()!函数的使用,正确的是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline!int("0b10000",10)!
            \task \lstinline!int("16",10)!
            \task \lstinline!int("0o20",10)!
            \task \lstinline!int("0x10",10)!
        \end{tasks}

        % 10
        \item 有如下程序段,输出结果是?(\qquad)
        \begin{lstlisting}
            for i in range(3):
                print(i, end=",")
        \end{lstlisting}
        \begin{tasks}(4)
            \task 0,1,2
            \task 0,1,2,
            \task 0,1,2,3
            \task 0,1,2,3,
        \end{tasks}

        % 11
        \item 小明在学习编程时,学习到了一个二进制数101,这个二进制数对应的十进制数的数值是?(\qquad)
        \begin{tasks}(4)
            \task 2
            \task 3
            \task 4
            \task 5
        \end{tasks}

        % 12
        \item 已定义一个列表\lstinline!strSZ=["语文","数学""英语"]!,现向列表末尾添加一个学科\lstinline!"科学"!,操作正确的是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline!strSZ.read("科学")!
            \task \lstinline!strSZ.write("科学")!
            \task \lstinline!strSZ.append("科学")!
            \task \lstinline!strSZ.insert("科学")!
        \end{tasks}

        % 13
        \item 关于\lstinline!abs()!函数,描述不正确的是?(\qquad)
        \begin{tasks}(2)
            \task \lstinline{abs()}函数的功能是取整数的绝对值
            \task \lstinline{abs(0)}的运行结果是0
            \task \lstinline{abs(-3)}的运行结果是3
            \task \lstinline{abs(3.45)}的运行结果是3.45
        \end{tasks}

        % 14
        \item 关于\lstinline!open()!函数的参数,下列描述不正确的是?(\qquad)
        \begin{tasks}
            \task \lstinline!'r'!以只读方式打开文件
            \task \lstinline!'w'!以写入的方式打开文件,如果文件不存在,则会提示错误
            \task \lstinline!'a'!打开文件,并将新内容写入到已有内容之后
            \task \lstinline!'r+'!以读、写方式打开文件
        \end{tasks}
        
        % 15
        \item 执行代码\lstinline!x,y,z = sorted([1,3,2])!之后,变量y的值为?(\qquad)
        \begin{tasks}(4)
            \task 1
            \task 2
            \task 3
            \task 0
        \end{tasks}

        % 16
        \item 以下表达式的值为\lstinline!True!的是?(\qquad)
        \begin{tasks}(4)
            \task \lstinline!bool([])!
            \task \lstinline!bool(0.0)!
            \task \lstinline!bool("False")!
            \task \lstinline!bool(range(0))!
        \end{tasks}

        % 17
        \item 用于将整数和字符串转换成浮点数的函数是?(\qquad)
        \begin{tasks}(4)
            \task \lstinline!int()!
            \task \lstinline!float()!
            \task \lstinline!str()!
            \task \lstinline!chr()!
        \end{tasks}

        % 18
        \item 关于 Python异常处理的作用,描述不正确的是?(\qquad)
        \begin{tasks}
            \task 异常处理可以让程序不至于因为小错误而导致程序崩溃
            \task 异常处理能够补充程序的漏洞,让程序在任何情况下都不会终
            \task 异常处理能够提高程序的容错性
            \task 异常处理能够让程序变得更加友好
        \end{tasks}

        % 19
        \item \lstinline!print(divmod(223,11))!的运行结果是?(\qquad)
        \begin{tasks}(4)
            \task 20,3
            \task (20,3)
            \task 3,20
            \task (3,20)
        \end{tasks}

        % 20
        \item \lstinline!max()!返回可迭代对象中的元素中的最大值或者所有参数的最大值,则\lstinline!max("123")!返回的值是?(\qquad)
        \begin{tasks}(4)
            \task \lstinline!'123'!
            \task 123
            \task 3
            \task \lstinline!'3'!
        \end{tasks}

        % 21
        \item 能够只删除数组\lstinline!strSZ=["语文","数学"英语","科学"]!中的\lstinline!"科学"!这个元紊的操作,其中正确的是¨?(\qquad)
        \begin{tasks}(2)
            \task \lstinline!strSZ.remove[3]!
            \task \lstinline!strSZ.remove("科学")!
            \task \lstinline!del strSZ[4]!
            \task \lstinline!del strSZ!
        \end{tasks}

        % 22
        \item 下列程序段在运行是输入\lstinline!"yes"!,则输出结果是?(\qquad)
        \begin{lstlisting}
            try:
                x = eval(input())
                print(x)
            except NameError:
                print("OK")
        \end{lstlisting}
        \begin{tasks}(4)
            \task yes
            \task OK
            \task 没有输出
            \task 程序出错
        \end{tasks}

        % 23
        \item \lstinline!range()!函数根据传入的参数创建一个新的\lstinline!range!对象,下列与\lstinline!range(5)!相同的结果是?(\qquad)
        \begin{tasks}(4)
            \task \lstinline{range(1, 5)}
            \task \lstinline{range(1, 6)}
            \task \lstinline{range(0, 5)}
            \task \lstinline{range(0, 6)}
        \end{tasks}

        % 24
        \item 判断可迭代对象的每个元素是否都为\lstinline!True!值的函数是?(\qquad)
        \begin{tasks}(4)
            \task \lstinline{all()}
            \task \lstinline{any()}
            \task \lstinline{map()}
            \task \lstinline{sorted()}
        \end{tasks}

        % 25
        \item 下列运算函数,结果分别返回商和余的值的是?(\qquad)
        \begin{tasks}(4)
            \task \lstinline{abs()}
            \task \lstinline{divmod(a,b)}
            \task \lstinline{max()}
            \task \lstinline{pow(a,b)}
        \end{tasks}
    \end{enumerate}

    \vspace{1cm}
    {\noindent\heiti 第二部分、判断题(共 10 题,每题 2 分,共20分.)}
    \begin{enumerate}
        \setcounter{enumi}{25}
        % 26
        \item 将十六进制数 0x7e4 转换成十进制数,可以使用\lstinline!int(0x7e4,16)!语句,而不能使用\lstinline!int("7e4",16)!语句.(\qquad)

        %27
        \item 十六进制数转换为二进制数较简单,只需要将每一位十六进制数转换为四位二进制数,即可.(\qquad)
        
        %28
        \item 在Python中,向csv文件中写入数据时,用空格分割列表name中的元素,可以使用如下代码,(其中file为文件变量名).(\qquad)
        \begin{lstlisting}
            file.write(' '.join(name)+'\n')
        \end{lstlisting}
        
  
        %29
        \item student.csv 文件中存储有班级学生名单,使用以下Python程序可以把学生名单一一读取出来.(\qquad)
        \begin{lstlisting}
            f = open('strudent.csv','r')
            s = f.read().strip('\n').split(';')
            f.close()
        \end{lstlisting}
        
        %30
        \item 在Python中, \lstinline!filter()!函数的参数有两个,第一必须是函数,第二个必须是序列.(\qquad)
        
        %31
        \item \lstinline!input()!函数返回的值是字符串,如果要输入数值并参与运算,那么必须用\lstinline!int()!函数将其转换为数值后,再参与运算。.(\qquad)
        
        %32
        \item \lstinline!try-except-else-finally!异常处理结构中,不论\lstinline!try!程序段中的语句有没有错误,\lstinline!else!程序段中的语句都会得到执行.(\qquad)
        
        %33
        \item CSV文件的每一行都是一维数据,因此它的每一行都可以用列表类型来表示.(\qquad)
        
        %34
        \item 在Python中,运行下面代码会输出:\lstinline![(0,'王萍'),(1,'李丽'),(2,'宋明')]!.(\qquad)
        \begin{lstlisting}
            name = ['王萍','李丽','宋明']
            print(list(enumerate(name)))
        \end{lstlisting}
        
        %35
        \item 语句\lstinline!print("www","python","org",sep=",")!的输出结果是\lstinline!www.python.org!.(\qquad)
    \end{enumerate}

    \newpage
    {\noindent\heiti 第三部分、编程题(共 3 题,共30分.)}
    \begin{enumerate}
        \setcounter{enumi}{35}
        
        % 36
        \item 输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置.
        
        {\heiti 输入}:

        4 5 2 3 1 7 9 10
        
        {\heiti 输出}:

        \lstinline![1,2,3,4,5,7,9,10]!

        \lstinline![5,3,4,1,2,6,7,8]!

        请编写程序实现上述功能,或补全代码.

        \begin{lstlisting}
            s = input()
            x = s.split(____1____)
            a = []
            b = []
            n = ____2____
            for i in range(0, len(x)):
                a.append(int(____3____))
                n = n+1
                b.append(n)
            
            for i in range(____4____):
                for j in range(i+1, n):
                    if ____5____:
                        a[i], a[j] = a[j], a[i]
                        b[i], b[j] = b[j], b[i]

            print(a)
            print(b)
        \end{lstlisting}
 
        
        \vfill

        %37
        \item 一个小朋友正在求解一道小学四年级提优题,题目如下:
        
        把 1296 拆分成$a$、$b$、$c$、$d$四个整数,如果$a$加上2,$b$减去2,$c$乘以2,$d$除以2以后四个数都相等.现在请你编写程序求出这四个数.

        补全下面的代码:
        \begin{lstlisting}
            for a in range(1,____1____):
                b = ____2____
                for c in range(1, 1296-a-b):
                    d = ____3____
                    if(b-2 == c*2) and (a+b+c+d == ____4____):
                        print(a,b,c,d)
        \end{lstlisting}
        \vfill

        \newpage
        % 38
        \begin{minipage}{.6\textwidth}
            \item 读取文件"plant.csv"的数据,数据内容如下图显示:
        
            下列代码实现了读取"植物编号"和"生长情况"信息,输出"生长情况"达到 6 的数量,补全下面的代码.

            \begin{lstlisting}
                import csv
                with open("plant.csv") as f:
                    rows = list(____1____(f))
                    s = 0
                    for row in rows[1:]:
                        if (____2____ >= 6):
                            s = s+1

                print(s)
            \end{lstlisting}
        \end{minipage}
        \begin{minipage}{.38\textwidth}
            \centering
            \includegraphics[width=.4\textwidth]{38.png}
        \end{minipage}
    \end{enumerate}

    \newpage
    \begin{center}
        \Huge \heiti 参考答案
    \end{center}

        \begin{tasks}[label=\arabic*.](5)
            \task A %1
            \task A %2
            \task A %3
            \task C %4
            \task B %5

            \task D
            \task A
            \task D
            \task B
            \task B

            \task D
            \task C
            \task A
            \task B
            \task B

            \task C
            \task B
            \task B
            \task B
            \task D

            \task B
            \task B
            \task C
            \task A
            \task B

            \task $\times$
            \task $\checkmark$
            \task $\checkmark$
            \task $\times$
            \task $\checkmark$

            \task $\times$
            \task $\times$
            \task $\checkmark$
            \task $\checkmark$
            \task $\times$
        \end{tasks}

        \begin{enumerate}
            \setcounter{enumi}{35}
            \item \begin{lstlisting}
                " "         #1
                0           #2
                x[i]        #3
                n           #4
                a[i] > a[j] #5
            \end{lstlisting}

            \item \begin{lstlisting}
                1297    #1
                a+4     #2
                c*4     #3
                1296    #4
            \end{lstlisting}

            \item \begin{lstlisting}
                csv.reader  #1
                int(row[1]) #2
            \end{lstlisting}
        \end{enumerate}
\end{document}